package lei.g_java数组;

import java.util.*;

/**
 * @className: MapExample
 * @author: xl
 * @date: 2025/3/1 15:07
 * @Version: 1.0
 * @description:
 */

public class MapExample {

    public static void main(String[] args) {

        /**
         * HashMap和TreeMap的区别
         * 1、HashMap是无序的，TreeMap是有序的
         * 2、HashMap允许null键和null值，TreeMap不允许null键
         * 3、HashMap线程不安全，TreeMap线程安全
         * 4、HashMap性能高，TreeMap性能低
         * 5、HashMap可以存储任意类型的键和值，TreeMap只能存储键为Comparable类型的对象
         */


        // 使用 HashMap（无序键值对）
        Map<String, Integer> hashMap = new HashMap<>();
        hashMap.put("Alice", 25);
        hashMap.put("Bob", 30);
        hashMap.put("Charlie", 28);

        Map<String, Object> map1 = Map.of("name", "XL", "age", 20);


        HashMap<String, Object> map2 = new HashMap<>(map1);

        TreeMap<String, Object> map3 = new TreeMap<>(map1);


        System.out.println(map2);

        System.out.println(map3);

        // 使用 LinkedHashMap（保留插入顺序）
        Map<String, String> linkedHashMap = new LinkedHashMap<>();
        linkedHashMap.put("Key1", "Value1");
        linkedHashMap.put("Key2", "Value2");





        // 获取值
        int age = hashMap.get("Bob"); // 30

        // 遍历 Map 的键
        for (String key : hashMap.keySet()) {
            System.out.println(key);
        }

        // 遍历 Map 的值
        for (Integer value : hashMap.values()) {
            System.out.println(value);
        }

        // 遍历键值对
        for (Map.Entry<String, Integer> entry : hashMap.entrySet()) {
            System.out.println(entry.getKey() + ": " + entry.getValue());
        }
    }
}

